import axios from 'axios'

const http = axios.create({
  // 使用 Vite devServer 代理，默认把所有请求走 /api 前缀
  // 若需直连后端，设置环境变量：VITE_API_BASE=http://host:port
  baseURL: import.meta.env.VITE_API_BASE || '/api',
  timeout: 15000
})

http.interceptors.request.use((config) => {
  // 注入鉴权 token（后端要求使用 Header 字段：token）
  const token = localStorage.getItem('token')
  if (token) config.headers.token = token
  return config
})

http.interceptors.response.use(
  (res) => {
    // 兼容两类返回：
    // 1) 统一包装：{ code, msg, data }
    //    - 本项目规范：code === 1 表示成功
    // 2) 直接数据：data 为业务对象或数组
    const r = res.data
    if (r && typeof r === 'object' && 'code' in r) {
      if (r.code === 1 || r.success === true) return r.data
      const err = new Error(r.msg || r.message || '接口返回异常')
      err.response = res
      throw err
    }
    return r
  },
  (err) => {
    // 未登录/鉴权失败
    if (err?.response?.status === 401) {
      localStorage.removeItem('token')
      // 可以在此触发全局事件供 App.vue 监听后切换到登录界面
      window.dispatchEvent(new CustomEvent('auth:unauthorized'))
    }
    const message = err?.response?.data?.msg || err?.message || '网络异常'
    return Promise.reject(new Error(message))
  }
)

export default http